DevOps CICD K8s DockerTake a backup of the etcd cluster and save it to /tmp/etcd-backup.db
這題的題目好短阿,肯定很簡單
前幾天我們有提過,所有K8s objects的資料都儲存在etcd之中。定期備份etcd對於在災難情況下(例如所有Control Plane節點掛掉)恢復Kubernetes集群是非常重要的。snapshot file包含所有Kubernetes的狀態和關鍵訊息。為了確保Kubernetes中敏感資料的安全,盡量將snapshot file進行加密。
這題是考etcd的集群備份,這題很重要,etcd的考點幾乎都是集群備份,畢竟這也是etcd最重要的目的。etcd備份需要借助K8s強大的官方文件,參考這裡當中的Backing up an etcd cluster。etcd的備份有兩種方式:
etcd支持內建snapshot,因此備份etcd集群很容易。可以使用etcdctl snapshot save命令從集群內物件中獲取,也可以從當前未被etcd process使用的etcd資料目錄中複製member/snap/db 文件。etcd在支持備份的Volume(例如Amazon Elastic Block Store)上運行,可以通過獲取存Volume的snapshot來備份。這邊補充一下
Snapshot的概念好了。Snapshot又稱為快照,就像照相一樣,在某個時間點,將硬碟目前的整個狀態儲存起來,以作為將來還原的備份依據。Snapshot是幾乎所有的儲存服務設備都會提供的功能,就像是幫你硬碟上的資料照張像一樣,把這個目前的狀態記錄下來,以備將來還原之用,跟Windows上的系統還原意義差不多。
Souece: https://ithelp.ithome.com.tw/articles/10010377
因為我們還沒有學過Volume的概念,我們就用第一種方式Built-in snapshot來備份etcd吧! 具體步驟如下:
etcd
## 下載etcd-client
$ apt install etcd-client
## 先檢查etcd版本
## 使用etcd v3的版本時,需要設置環境變數ETCDCTL_API=3
$ ETCDCTL_API=3 etcdctl version
## 進入etcd檔案目錄
## 因為etcd是static pod,所以etcd檔案目錄即是static pod所在目錄
$ cd /etc/kubernetes/manifests
$ cat etcd.yaml
...
    ## 找到這些檔案的路徑,作為之後參數使用
    - --advertise-client-urls=https://172.17.0.14:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    ...
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    ...
...
## 連線到etcd例項,並列出member,須帶入etcd.yaml中的參數
$ ETCDCTL_API=3 etcdctl member list --endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt 
a9a3a87b9b08ff5e, started, g8master, https://192.168.132.241:2380, https://192.168.132.241:2379
## 以etcdctl snapshot save備份
$ ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db \
--endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt 
Snapshot saved at /tmp/etcd-backup.db
## 檢查備份檔案
$ ETCDCTL_API=3 etcdctl snapshot status /tmp/etcd-backup.db -w table \
--endpoints https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt 
+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 24b6552d |  5488124 |       1113 |     4.6 MB |
+----------+----------+------------+------------+
etcdctlis a command line client for etcd
使用export ETCDCTL_API=3命令將etcdctl client的ETCDCTL_API環境變數版本設定為3
因為Kubernetes集群使用https,因此需要指定--cert-file、--key-file和--ca-file三個參數,參數檔案都位於 /etc/kubernetes/pki/etcd目錄下。
至於要怎麼知道參數名稱是--cert、--key和--cacert,它們又代表甚麼意義呢?可以透過ETCDCTL_API=3 etcdctl snapshot save -h命令查找:
--cert=""					--key=""--cacert=""				不加
--endpoints參數時,默認訪問的是https://127.0.0.1:2379
今天介紹了etcd的備份方法,etcd的備份在K8s中是很重要的部分,考試也會出現,大家要把握住喔!好啦,今天就到這囉~ 謝謝大家~
儲存技術ABC 之 Snapshot
ETCD 使用
Operating etcd clusters for Kubernetes
You can find me on